package Dbutil

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
)

//建立数据库的链接

// 定义一个全局对象Db
var Db *sql.DB

//数据库初始化
func InitDB() (err error) {
	// DSN:Data Source Name
	dsn := "root:123456@tcp(127.0.0.1:3306)/mywork?charset=utf8mb4&parseTime=True"
	// 不会校验账号密码是否正确
	// 注意！！！这里不要使用:=，我们是给全局变量赋值，然后在main函数中使用全局变量Db
	Db, err = sql.Open("mysql", dsn)
	if err != nil {
		return err
	}
	// 尝试与数据库建立连接（校验dsn是否正确）
	err = Db.Ping()
	if err != nil {
		return err
	}
	return nil
}

//查询用户
func SelectByName(name string) bool {
	sqlstr := "select uid from userInfo where name=?"
	id := 0
	err := Db.QueryRow(sqlstr, name).Scan(&id)
	if err != nil {
		//fmt.Printf("scan failed, err:%v\n", err)
		return false
	}
	//没有查找到该用户，
	if id == 0 {
		return false
	}

	return true
}

//添加用户信息
func InsertUser(name string, pwd string, statas int) bool {
	sqlstr := "insert into userinfo(name,pwd,status) values (?,?,?)"
	_, err := Db.Exec(sqlstr, name, pwd, 0)
	if err != nil {
		fmt.Printf("InsertUser,err:%v", err)
		return false
	}
	return true
}

//用户登录更新状态信息
func UpdateStatus(name string, pwd string, status byte) bool {
	ishas, isLine := SelectByNameAndPwd(name, pwd)
	//用户存在，并且用户不在线 更新用户信息
	if ishas == true {
		if isLine == 0 {
			str := "update userinfo set status=? where name=?"
			_, err := Db.Exec(str, status, name)
			if err != nil {
				return false
			}
			return true
		} else {
			fmt.Printf("该用户已经登陆，无法重新登录\n")
			return false
		}

	} else {
		fmt.Printf("请检查您的用户名和密码\n")
		return false
	}

}

//查询用户
func SelectByNameAndPwd(name string, pwd string) (bool bool, hasLine byte) {

	sqlstr := "select uid,status from userInfo where name=? and pwd=?"
	id := 0

	err := Db.QueryRow(sqlstr, name, pwd).Scan(&id, &hasLine)
	if err != nil { //查无此人，密码不正确
		//fmt.Printf("scan failed, err:%v\n", err)
		return false, hasLine
	}

	return true, hasLine
}
func UserQuit(name string) bool {
	//修改该用户的登录状态
	str := "update userinfo set status=? where name=?"
	_, err := Db.Exec(str, 0, name)
	if err != nil {
		return false
	}
	return true
}
